home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Plus 1995 #5 & #6
/
Amiga Plus CD - 1995 - No. 5 and 6.iso
/
pd
/
serien
/
purity
/
nr.11
/
workshop
/
pascal-workshop
< prev
next >
Wrap
Text File
|
1995-04-21
|
12KB
|
378 lines
---------
WORKSHOP PCQ-Pascal
----------
___________________________________________________________________________
---------------------------------------------------------------------------
-- Vorstellung --
Die Programmiersprache Pascal kennt ja normalerweise jeder ComputerFreak!!!
Diese Programmiersprache zählt auf jeden Fall zu den beliebtesten in der PC-
Szene, obwohl C auch stark im kommen ist. Pascal ist aber im gegensatz zu C
leichter zu erlernen. In der Amiga Szene gibt es einen sehr guten Pascal-
Compiler und zwar den Kick Pascal von ???, aber man muß so um die 200-300 DM
für diese Sprache bezahlen. Es gibt aber auch in der PD-Szene einen Compiler
der als Freeware freigegeben ist.
Es handelt sich um ~~~ PCQ PASCAL ~~~
Geschrieben von einem Amerikaner namens Patrick Quaid.
Man benötigst entweder die Fish Disks 503,511 und evtl. 521, oder aus der
Purity PD-Serie die Nr. 3 um mit diesem Dialekt zu Programmieren.
Am einfachsten ist es mit der Purity 3 da alles schon passend installiert
ist, und eine deutsche Anleitung dabei ist. Man muß nur noch die Disketten
entpacken!!!!
___________________________________________________________________________
---------------------------------------------------------------------------
-- EINLEITUNG --
So, bevor wir mit dem Workshop anfangen wollen, müssen wir noch einiges
erklären. Wer seine Disketten schon passend installiert hat, und alles
vernünftig läuft, kann die Einleitung getrost überspringen.
Ich gehe mal davon aus das wir mit der Purity 3 arbeiten. Nach dem die Dis
ketten entpackt sind, was eigentlich keine Schwierigkeiten macht, da es
beschrieben ist,haben wir am Ende 2 Disketten !!!!
Einmal die Disk 1, wo die ganzen Includes,Compiler etc. drauf sind,
und die Disk 2, wo Beispiele vom PCQPascal- Ersteller Patrick Quaid bei-
gefügt sind, und ein paar Hilfsprogramme, eine deutsche Anleitung für den
PCQ-Compiler und ein paar Demos.
Bevor wir mit der Einleitung beginnen, möchte ich mich vorab bei einigen
Leuten bedanken. Erst mal bei Patrick Quaid, für den Compiler (auch wenn ich
ihn noch nicht kenne) und bei Alain Declercq vom A&M Club, daß er mich auf
die Idee gebracht hat, einen Workshop über PCQ zu schreiben.
Eins möchte ich auch noch zum Thema Pascal schreiben!!!
Die Purity Serie befaßt sich nur mit Pascal und ist wirklich eine super
PD-Serie, die ich jedem Pascal Programmierer ans Herz legen will.
Falls Du die Disketten noch nicht hast, kannst Du mich gerne mit Disks,
Rückporto anschreiben , und ich kopiere Dir die beiden Disketten.
Die Adresse steht dann am Ende des Workshops.
So, fangen wir an. Wir starten, sobald wir mit dem DME(oder einen anderen
Editor) ein Programm geschrieben haben (--- Siehe unten im WorkShop ---).
Wir klicken auf das File `Make`, und geben den Namen des Programms ein.
Dieses geschriebene Programm muß sich im `.p` Verzeichnis befinden, sonst
findet der Compiler das Programm nicht.
WICHTIG: Wir speichern die Programme immer gleich im `.p` Verzeichnis,
und mit der Endung `.p` ab. Die Zeichen `` natürlich nicht mit
eingeben.
Wenn alles gut läuft compliert,assembliert und linkt das Programm `Make`
alles für Dich.
Das fertige Programm liegt dann immer im Verzeichnis`.bin`. Dann gehst Du
ins CLI oder Shell, und gibst `cd DF0:.bin` ein (Die Disk 1, muß sich
natürlich im Laufwerk DF0: befinden). Danach den Namen des Programms, ohne
die Endung `.p`. Dann müßte es ohne Probleme laufen. Der Name der Disk 1
muß auf jeden Fall `INCLUDE` heißen, oder man muß das Verzeichnis `INCLUDE`
mit -- assign Include: Pascal(bzw. den Namen der Disk):Include -- zuweisen,
weil das Programm `Make` und der Compiler die Includes etc. sonst nicht fin
det. Ich hatte einige Probleme beim ersten Start damit!!!
So, das wär eigentlich das wichtigste vorab. Bei Fragen oder Problemen
kannst Du dich an mich wenden. Ich helfe gerne bei kleinen und wenn ich es
kann, auch bei großen Problemen !!!!!
Ich gebe keine Garantie das alles 100% richtig programmiert ist. Bei
Fehlern oder Verbesserungsvorschlägen bitte mit mir in Verbindung setzen.
Ich bin erst seit kurzem von ModulaII zu Pascal gekommen.
Ich kann ein wenig Kritik ertragen !!!!!!!!
____________________________________________________________________________
----------------------------------------------------------------------------
-------- Der Workshop --------
Nun, nachdem wohl alles einigermaßen verstanden ist, kann es ja losgehen.
Weil alle Programmier-Worshops mit dem Programm "Hello World" anfangen,
werden wir es nicht so machen.
Wenn Du jetzt deinen Editor gestartet hast, gibst Du ein:
Program MeinErstesProgramm;
Begin
WriteLn("Mein erstes Pascal-Proggy am AMIGA");
End.
und speichern es unter dem Namen MeinErstesProgramm.p im .p Verzeichnis ab.
Als nächstes klickst Du das Programm MAKE an und gibst "nur"
`MeinErstesProgramm` ein, ohne der Endung .p. Das Make Utility übersetzt,
assembliert und linkt das Programm. Am Ende des Übersetzungsvorganges
müßte dann eigentlich stehen "BLink complete - Maximum code size .... usw..
Wenn dieses dort steht ist alles klar gelaufen, wenn nicht überprüfe
den Quellcode noch mal. Das complierte Programm findest Du im .bin Direc
tory. Mach dann ein CLI/Shell Fenster auf gib "cd df0:.bin" ein,
nachdem Du die Returntaste gedrückt hast gibst Du dann "MeinErstesProgramm"
ein, und schau da was da steht !!!!! Naja, so schwer war das doch nicht,
oder ????
Zeile 1: -Programm Mein..usw..- `Program` steht immer am Anfang, da sich der
Compiler daran orientiert. Danach der Name des Programms, wie es
heißen soll.
Zeile 2: -Begin- muß immer angegeben werden, weil nach dem `Begin` das
eigentliche abarbeiten des Programms beginnt.
Zeile 3: -WriteLn("......")- Nach WriteLn(" kann man einen belibigen Text
eingeben, aber am Ende des Textes nicht die Zeichen ") vergessen.
Zeile 4: -End- Bedeutet Ende des Programms.
Und weiter geht`s. Wir wollen ja noch richtig programmieren.
Das nächste Programm heißt EingabeAusgabe. Das Programm speicherst Du
ebenfalls im ".p" Verzeichnis ab.
Program EingabeAusgabe;
var test : array [1..50] of char;
Begin
WriteLn("Bitte etwas eingeben : ");
Readln(test);
WriteLn("----------");
WriteLn("Ihre Eingabe war : ");
WriteLn(test);
End.
Mit var legst Du eine Variable fest, in diesem Fall `test`. Diese Variable
kann 50 Zeichen aufnehmen !!!! Ich hätte auch einfach nur schreiben
können:
var test : char ;
Dann könnte man der Variablen test aber nur 1 Zeichen zuweisen. Mit der
Zuweisung:
var test : String ; { Bemerkung meinerseits am Textende,
Diesel
}
habe ich immer einen Guru hervorgerufen, wenn ich mehr wie vier Zeichen
zugewiesen habe. Liegt wohl daran das ein String nicht mehr aufnehmen kann!!
Mit ReadLn(test); erwartet der Computer eine Eingabe von Dir. Die Variable
test merkt sich dann die Eingabe des Users und gibt sie später wieder mit
WriteLn(test) aus. Bei WriteLn(test) darf man keine ""(Gänsefüßchen) mit
eintippen, da sonst nur test ausgegeben wird.
Kommen wir zum nächsten Programm.
Program Addieren;
Var Zahl1 : Integer;
Zahl2 : Integer;
Begin
WriteLn("Jetzt wollen wir mal addieren !!!");
WriteLn("Bitte geben Sie die erste Zahl ein : ");
Readln(Zahl1);
WriteLn("Bitte geben Sie die zweite Zahl ein : ");
Readln(Zahl2);
WriteLn("-----------");
WriteLn("Zahl 1 + Zahl 2 ergibt");
WriteLn(Zahl1 + Zahl2);
End.
Den Variablen Zahl1 & Zahl2 geben wir eine Zuweisung von Zahlen. Man kann
dann mit WriteLn(Zahl1 + Zahl2); das Ergebnis von Zahl1 + Zahl2 ausgeben.
Das selbe geht mit dem Programm Subtrahieren.
Program Subtrahieren;
Var Zahl1 : Integer;
Zahl2 : Integer;
Begin
WriteLn("Jetzt wollen wir mal addieren !!!");
WriteLn("Bitte geben Sie die erste Zahl ein : ");
Readln(Zahl1);
WriteLn("Bitte geben Sie die zweite Zahl ein : ");
Readln(Zahl2);
WriteLn("-----------");
WriteLn("Zahl 1 - Zahl 2 ergibt");
WriteLn(Zahl1 - Zahl2);
End.
Hierbei halt nur mit - anstatt +. Das kann man auch mit dem Zeichen / für
Teilen und * für Multiplizieren machen. Du kannst es ja einfach mal
alleine ausprobieren.
Wenn Du genug ausprobiert hast, geht`s weiter mit einer FOR-Schleife.
Program Schleife;
Var i : Integer;
Begin
For i := 1 To 10 Do WriteLn(i);
WriteLn("So, die 10 haben wir erreicht, jetzt geht`s abwärts");
For i := 10 DownTo 1 Do WriteLn(i);
End.
Nun können wir auch schon Schleifen programmieren. Ich glaube große Er-
klärung muß bei diesem Beispiel nicht sein. Die Variable `i`, wird solange
hochgezählt(runtergezählt) bis es den Wert nach dem `To` ereicht hat, und
gibt den Befehl nach `Do` nach jedem Schleifendurchlauf aus.
So, für`s erste sollte das genügen, Ihr könnt mit den Programmen ja jetzt
ein wenig experimentieren, und vieleicht kommt Ihr ja auf die eine oder
andere Idee. Auf der zweiten Diskette befinden sich im Verzeichnis `Exam
ples`, vom Programmierer einige Beispielprogramme, die Du dir ja mal an
gucken kannst, um vieleicht etwas daraus etwas zu lernen. Es sind aber nur
die SourceCodes( Programmiertexte) enthalten. Um sich die Programme anzus
ehen, müßt Ihr es noch durch das Programm `Make` schicken.
Ich würde mich sehr über Deine Kritik/Idee an diesen Worshop freuen!!!!
Du kannst die Kritik auch über Alain schicken !!!!
YGAR wird es mir bestimmt weiterreichen, oder ?????????????????
Ich werde auch vieleicht in Zukunft einen 2. Workshop machen, der ein wenig
mehr ins Detail geht, und zwar wie man die Library`s anspricht und mit Pro
zeduren arbeitet.
Meine Adresse:
Andreas Mauß
Neuenkirchener Str. 40
4840 Rheda-WD
Tel. 05242/49807
08.01.93
~~~~~~ FINE ~~~~~~
Noch nicht ganz 'FINE', aber fast. Ein String ist in PCQ-Pascal wie auch in
C nur ein Zeiger auf einen Text, d.h. ein Zeiger auf einen Speicherbereich,
in den Ihr einen beliebigen Text einlesen könnt. Ein Beispiel, wie man es
nicht machen sollte:
Program GuruOrNot;
Var
txt : String; { Nur ein Zeiger, Standard : 0 }
Begin
writeln("Text> ");
readln(txt);
End.
Nun, was passiert ? Das Programm startet, in der Variablen txt steht nichts,
also Null. D.h. txt zeigt auf den Speicher ab der Speicherstelle NULL. Nun,
wir geben drei Zeichen ein, und nichts passiert. Wir geben vier Zeichen ein,
und Amigas mit 68000 laufen immer noch. Aber spätestens mit fünf Zeichen
rufen wir einen Guru hervor. Warum ?
Wie gesagt, zeigt Text auf das RAM ab 0. Ab Zelle 4 steht nun aber leider
die Adresse der Execbase, des Angelpunktes, an dem das gesamte System hängt.
Und die wird bei 5 bzw. 6 Zeichen einfach überschrieben ... Grüße aus
Indien ! Also muß dafür gesorgt werden, das txt immer auf einen Speicher-
bereich zeigt, der uf alle Fälle groß genug ist. Dazu gibt es mehrere
Möglichkeiten:
...
Var txt : String;
buf1 : Array[0..99] of Char;
Begin
txt := Adr( buf1 );
End.
Hier zeigt txt dann auf den Bereich, der durch buf1 reserviert ist, also
100 Bytes. Reicht fürds erste. Mögl. 2 :
...
{$I "Include:utils/stringlib.i" }
Var txt : String;
Begin
txt := AllocString(80);
...
FreeString( txt );
End.
Jetzt wird über die PCQ-Routine AllocString (zu finden in stringlib.i )
ein Puffer über 80 Bytes vom System geholt und ein Zeiger darauf an
txt übergeben. Mit FreeString gibt man den Speicher an das System
zurück.
Soweit fürs erste zum Stringhandling. Bis demnächst ...
Diesel